package com.xuan.bazi.utils;

import java.math.BigDecimal;
import java.util.*;

/**
 * 通用工具
 */
public class CommonUtil {

    /**
     * 保留Double类型数据的N位小数（不四舍五入）
     *
     * @param number double类型数据
     * @param count  保留小数位数
     * @return double类型数据
     */
    public static Double getDouble(double number, int count) {

        BigDecimal bigDec = new BigDecimal(number);
        return bigDec.setScale(count, BigDecimal.ROUND_FLOOR).doubleValue();

    }

    /**
     * 向list集合中添加指定个数的空元素
     *
     * @param count 元素数量
     * @return 空list集合
     */
    public static List<String> addNullList(int count) {

        List<String> list = new ArrayList<>();
        for (int i = 0; i <= (count - 1); i++) {
            list.add("");
        }
        return list;

    }

    /**
     * 删除list集合中的指定的元素
     *
     * @param list    List集合
     * @param element 需要删除的元素
     */
    public static void removeElementList(List<String> list, String element) {

        for (int i = 0; i < list.size(); i++) {
            if (element.equals(list.get(i))) {
                list.remove(i);
                i--;
            }
        }

    }

    /**
     * 获取两个List数组中的不同元素
     *
     * @param list1 数组1
     * @param list2 数组2
     * @return 不同元素的数组
     */
    public static List<String> getListUnlike(List<String> list1, List<String> list2) {

        List<String> maxList = list1;
        List<String> minList = list2;
        if (list2.size() > list1.size()) {
            maxList = list2;
            minList = list1;
        }

        Map<String, Integer> map = new HashMap<>(list1.size() + list2.size());
        for (String string : maxList) {
            map.put(string, 1);
        }
        for (String string : minList) {
            Integer count = map.get(string);
            if (count != null) {
                map.put(string, ++count);
                continue;
            }
            map.put(string, 1);
        }

        List<String> unlike = new ArrayList<>();
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            if (entry.getValue() == 1) {
                unlike.add(entry.getKey());
            }
        }

        return unlike;

    }

    /**
     * 获取list集合里出现的重复元素及出现次数
     *
     * @param list List数据
     * @return key:元素   value:元素重复的次数
     */
    public static Map<String, Integer> getListIdentical(List<String> list) {

        Map<String, Integer> map = new HashMap<>();
        for (String item : list) {
            // 记录当前元素出现的次数
            int count = 1;
            // 若当前元素在map容器中已存在，计数器+1
            if (null != map.get(item)) {
                count = map.get(item) + 1;
            }
            // 向map容器里存数据
            map.put(item, count);
        }

        return map;

    }


}
